package com.dzl.base.service;

import java.util.List;

import org.apache.ibatis.session.RowBounds;

import com.dzl.base.pojo.BasePojo;

import tk.mybatis.mapper.entity.Example;

public interface BaseService<T extends BasePojo>{
	/**
     * 全属性插入
     */
    int insert(T t);

    /**
     * 按给定属性插入,效率比较高
     */
    int insertSelective(T t);

    /**
     * 批量插入
     */
    int insertList(List<? extends T> t);

    /**
     * 查询
     */
    List<T> select(T t);

    /**
     * 查询一个
     */
    T selectOne(T t);

    /**
     * 获取全部数据，通常和分页一起用
     */
    List<T> selectAll();

    /**
     * 查询符合条件的数据总条数
     */
    int selectCount(T t);

    /**
     * 根据模板查询条数
     */
    int selectCountByExample(Example example);

    /**
     * 根据主键查询
     */
    T selectByPrimaryKey(Object obj);

    /**
     * 根据模板查询
     */
    List<T> selectByExample(Example example);

    /**
     * 根据模板查询数据
     */
    T selectOneByExample(Example example);

    /**
     * 根据行号查询
     */
    List<T> selectByRowBounds(T t, RowBounds rowBounds);

    /**
     * 根据模板和行号查询
     */
    List<T> selectByExampleAndRowBounds(Example example, RowBounds rowBounds);

    /**
     * 根据模板删除
     */
    int deleteByExample(Example example);

    /**
     * 根据主键删除
     */
    int deleteByPrimaryKey(Object obj);

    /**
     * 删除
     */
    int delete(T t);

    /**
     * 根据模板更新，全字段更新
     */
    int updateByExample(T t, Example example);

    /**
     * 根据模板更新选定子段
     */
    int updateByExampleSelective(T t, Example example);

    /**
     * 根据主键更新,将设置的属性进行更新，如果不设置属性，自动更新为null。
     */
    int updateByPrimaryKey(T t);

    /**
     * 根据主键更新,将设置的属性进行更新，没有设置的属性不更新。推荐
     */
    int updateByPrimaryKeySelective(T t);
}
